package cn.ddiancan.xddcloud.psc.flow.handler;

import java.util.List;
import java.util.Optional;

import cn.ddiancan.xddcloud.psc.flow.context.Execution;
import cn.ddiancan.xddcloud.psc.flow.context.XddcloudContext;
import cn.ddiancan.xddcloud.psc.flow.engine.model.ConditionNode;
import cn.ddiancan.xddcloud.psc.flow.engine.model.NodeModel;

/**
 * 流程执行条件节点处理器
 * @since 1.0
 */
public interface ConditionNodeHandler {

    /**
     * 获取满足条件的条件节点
     * 子类需要实现的方法，来处理具体的操作
     *
     * @param flowLongContext 流程引擎上下文
     * @param execution       执行对象
     * @param nodeModel       节点模型
     * @return true 成功 false 失败
     */
    Optional<ConditionNode> getConditionNode(XddcloudContext flowLongContext, Execution execution, NodeModel nodeModel);

    /**
     * 获取满足条件的所有包容分支节点
     * 子类需要实现的方法，来处理具体的操作
     *
     * @param flowLongContext 流程引擎上下文
     * @param execution       执行对象
     * @param nodeModel       节点模型
     * @return true 成功 false 失败
     */
    Optional<List<ConditionNode>> getInclusiveNodes(XddcloudContext flowLongContext, Execution execution,
        NodeModel nodeModel);
}
